package com.xxl.job.admin.service;

import com.xxl.job.admin.core.model.XxlJobGroup;
import com.xxl.job.admin.core.model.PluginEntity;
import com.xxl.job.core.commons.base.PageData;
import com.xxl.job.core.commons.exception.DataxException;
import com.xxl.job.core.commons.mybatis.BaseService;
import com.xxl.job.core.commons.response.DeleteResult;
import com.xxl.job.core.commons.vo.plugin.PluginAddVo;
import com.xxl.job.core.commons.vo.plugin.PluginQueryVo;
import com.xxl.job.core.commons.vo.plugin.PluginUpdateVo;
import com.xxl.job.core.commons.vo.plugin.PluginVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author xuyue
 * @email xuyue@cetcbigdata.com
 * @date 2021-4-20 16:00
 * 解析器管理service
 */
public interface PluginService extends BaseService<PluginEntity> {

    /**
     * 添加解析器
     *
     * @param pluginAddVo
     * @return uuid
     */
    String add(PluginAddVo pluginAddVo);

    /**
     * 修改解析器
     *
     * @param pluginUpdateVo
     * @return uuid
     */
    Boolean update(PluginUpdateVo pluginUpdateVo);

    /**
     * 删除解析器
     *
     * @param uuids
     * @return DeleteResult
     */
    List<DeleteResult> delete(List<String> uuids);

    /**
     * 查询解析器
     *
     * @param uuid
     * @return PluginVo
     */
    PluginVo query(String uuid);

    /**
     * 查询解析器列表
     *
     * @param pluginQueryVo
     * @return List<PluginVo>
     */
    PageData<PluginVo> list(PluginQueryVo pluginQueryVo);

    /**
     * 校验解析器文件
     *
     * @param file
     */
    void checkFile(MultipartFile file) throws DataxException;

    /**
     * 获取解析器文件存储地址
     *
     * @param type
     */
    String getFilePath(String type);

    /**
     * 同步解析器到执行器
     */
    List<XxlJobGroup> async();
}
